#include <string>
#include <iostream>
#include "Heapsort.h"
using namespace std;

/// Funções de comparação:
int comparar_inteiros(const void* a, const void* b)
{
    return(*(int*)a - *(int*)b);
}

int comparar_strings(const void* a, const void* b)
{
    return((*(string*)a).compare(*(string*)b));
}

int comparar_chars(const void* a, const void* b)
{
    return((*(char*)a)-(*(char*)b));
}

/// Funções de impressão:
void imprimir(const int v[], size_t n)
{
    for (size_t i=0; i<n; i++) cout<<v[i]<<"\t";
    cout<<endl;
}

void imprimir(const string v[], size_t n)
{
    for (size_t i=0; i<n; i++) cout<<v[i]<<"\t";
    cout<<endl;
}

void imprimir(const char v[], size_t n)
{
    for (size_t i=0; i<n; i++) cout<<v[i]<<"\t";
    cout<<endl;
}

int main()
{
    int inteiros[] = {2,-1,3,100,4,23,13,344,54};
    size_t inteiros_tam = sizeof(inteiros)/sizeof(int);

    string strings[] = {"ponteiro","int","cast","void*","classe","gambiarra","int"};
    size_t strings_tam = sizeof(strings)/sizeof(string);

    char chars[] = {'d','f','r','h','b','w','a'};
    size_t chars_tam = sizeof(chars)/sizeof(char);

    Heapsort hs(inteiros,inteiros_tam,sizeof(int),comparar_inteiros);

    cout<<"* Vetor de inteiros:"<<endl;
    cout<<"> ";imprimir(inteiros,inteiros_tam);
    hs.heapsort();
    cout<<"> ";imprimir(inteiros,inteiros_tam);

    cout<<"\n* Vetor de strings:"<<endl;
    cout<<"> ";imprimir(strings,strings_tam);
    hs.heapsort(strings,strings_tam,sizeof(string),comparar_strings);
    cout<<"> ";imprimir(strings,strings_tam);

    cout<<"\n* Vetor de chars:"<<endl;
    cout<<"> ";imprimir(chars,chars_tam);
    hs.heapsort(chars,chars_tam,sizeof(char),comparar_chars);
    cout<<"> ";imprimir(chars,chars_tam);

    return(0);
}
